/* The code examples copyrighted by Nokia Corporation that are included to
 * this material are licensed to you under following MIT-style License:
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
#ifndef SIGNONCLIENT_H
#define SIGNONCLIENT_H

#include "SignOn/AuthService"
#include "SignOn/AuthSession"
#include "SignOn/Identity"

#include <QDeclarativeContext>

#include "identitymodel.h"

class SignonExample : public QObject
{

    Q_OBJECT

public:
    SignonExample(QDeclarativeContext *context);
    ~SignonExample();

public slots:
    void showAvailableMechanisms(const QString & method);
    void createIdentity(QString, QString, QString, QString);
    void removeIdentity(int index);
    void showIdentityMethods(int index);
    void challengeIdentity(int index);
    QString errorMessage();

private slots:
    void methodsAvailable(const QStringList &mechs);
    void mechanismsAvailable(const QString &method, const QStringList &mechs);

    void error(const SignOn::Error &err);

    void sessionResponse(const SignOn::SessionData &sessionData);
    void credentialsStored(const quint32 id);

    void userInfoAvailable(const SignOn::IdentityInfo& info);
    void identityMethodsAvailable(const QStringList &methods);
    void identityRemoved();

signals:
    void showError();

private:
    QDeclarativeContext* m_context;
    IdentityModel* m_identitymodel;
    SignOn::AuthService* authService;
    SignOn::IdentityInfo *m_info;
    int m_removeIndex;
    QString m_error;
};

#endif
